Часть I. Введение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Глава 1. Что такое дизайн и архитектура? . . . . . . . . . . . . . . . . . . . . . . . 25
Цель? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
Пример из практики . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
Заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
Глава 2. История о двух ценностях . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
Поведение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
Архитектура . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
Наибольшая ценность . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
Матрица Эйзенхауэра . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
Битва за архитектуру . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
Часть II. Начальные основы: парадигмы программирования . . . 41
Глава 3. Обзор парадигм . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
Структурное программирование . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
Объектно-ориентированное программирование . . . . . . . . . . . . . 44
Функциональное программирование . . . . . . . . . . . . . . . . . . . . . . . . 45
Пища для ума . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
Заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
6   ﻿Оглавление
Глава 4. Структурное программирование . . . . . . . . . . . . . . . . . . . . . . . . 47
Доказательство . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
Объявление вредным . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
Функциональная декомпозиция . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
Формальные доказательства отсутствуют . . . . . . . . . . . . . . . . . . . 51
Наука во спасение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
Тестирование . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
Заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
Глава 5. Объектно-ориентированное программирование . . . . . . . . . . . 54
Инкапсуляция? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
Наследование? .............................................. 58
Полиморфизм? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
Заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
Глава 6. Функциональное программирование . . . . . . . . . . . . . . . . . . . . 67
Квадраты целых чисел . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
Неизменяемость и архитектура . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
Ограничение изменяемости . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
Регистрация событий . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
Заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
Часть III. Принципы дизайна . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
Глава 7. Принцип единственной ответственности . . . . . . . . . . . . . . . . . 78
Признак 1: непреднамеренное дублирование . . . . . . . . . . . . . . . . 80
Признак 2: слияния . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
Решения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
Заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
Глава 8. Принцип открытости/закрытости . . . . . . . . . . . . . . . . . . . . . . . 85
Мысленный эксперимент . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
Управление направлением . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
Сокрытие информации ...................................... 90
Заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
Глава 9. Принцип подстановки Барбары Лисков . . . . . . . . . . . . . . . . . . 91
Руководство по использованию наследования . . . . . . . . . . . . . . . 92
Проблема квадрат/прямоугольник . . . . . . . . . . . . . . . . . . . . . . . . . . 92
Содержание      7
LSP и архитектура . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
Пример нарушения LSP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
Заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
Глава 10. Принцип разделения интерфейсов . . . . . . . . . . . . . . . . . . . . . 96
Принцип разделения интерфейсов и язык . . . . . . . . . . . . . . . . . . 98
Принцип разделения интерфейсов и архитектура . . . . . . . . . . . 98
Заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
Глава 11. Принцип инверсии зависимости . . . . . . . . . . . . . . . . . . . . . . 100
Стабильные абстракции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
Фабрики . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
Конкретные компоненты . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
Заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
Часть IV. Принципы организации компонентов . . . . . . . . . . . . . . 105
Глава 12. Компоненты . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
Краткая история компонентов . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
Перемещаемость . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
Компоновщики . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
Заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
Глава 13. Связность компонентов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
Принцип эквивалентности повторного использования
и выпусков . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
Принцип согласованного изменения . . . . . . . . . . . . . . . . . . . . . . 115
Принцип совместного повторного использования . . . . . . . . . 117
Диаграмма противоречий для определения связности
компонентов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
Заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
Глава 14. Сочетаемость компонентов . . . . . . . . . . . . . . . . . . . . . . . . . . 121
Принцип ацикличности зависимостей . . . . . . . . . . . . . . . . . . . . 122
Проектирование сверху вниз . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
Принцип устойчивых зависимостей . . . . . . . . . . . . . . . . . . . . . . . 129
Принцип устойчивости абстракций . . . . . . . . . . . . . . . . . . . . . . . 135
Заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
8   ﻿Оглавление
Часть V. Архитектура . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
Глава 15. Что такое архитектура . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
Разработка . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
Развертывание . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
Эффективность работы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
Сопровождение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
Сохранение разнообразия вариантов . . . . . . . . . . . . . . . . . . . . . . 148
Независимость от устройства . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
Нежелательная почта . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
Физическая адресация . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
Заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
Глава 16. Независимость . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
Варианты использования . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
Эффективность работы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
Разработка . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
Развертывание . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
Сохранение разнообразия вариантов . . . . . . . . . . . . . . . . . . . . . . 158
Разделение уровней . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
Разделение вариантов использования . . . . . . . . . . . . . . . . . . . . . 159
Режим разделения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
Возможность независимой разработки . . . . . . . . . . . . . . . . . . . . 161
Возможность независимого развертывания . . . . . . . . . . . . . . . . 161
Дублирование . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
Режимы разделения (еще раз) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
Заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
Глава 17. Границы: проведение разделяющих линий . . . . . . . . . . . . . 166
Пара печальных историй . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
FitNesse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
Какие границы проводить и когда? . . . . . . . . . . . . . . . . . . . . . . . . 172
О вводе и выводе . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
Архитектура с плагинами . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
Аргумент в пользу плагинов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
Заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
Оглавление    ﻿       9
Глава 18. Анатомия границ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
Пересечение границ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
Ужасный монолит . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
Компоненты развертывания . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
Потоки выполнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
Локальные процессы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
Службы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184
Заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
Глава 19. Политика и уровень . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186
Уровень . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
Заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
Глава 20. Бизнес-правила . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
Сущности . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
Варианты использования . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
Модели запросов и ответов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
Заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
Глава 21. Кричащая архитектура . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
Тема архитектуры . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198
Цель архитектуры . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
А что насчет Веб? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
Фреймворки — это инструменты, а не образ жизни . . . . . . . . 200
Тестируемые архитектуры . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
Заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
Глава 22. Чистая архитектура . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202
Правило зависимостей . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204
Типичный сценарий . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208
Заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
Глава 23. Презентаторы и скромные объекты . . . . . . . . . . . . . . . . . . . 210
Шаблон «Скромный объект» . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211
Презентаторы и представления . . . . . . . . . . . . . . . . . . . . . . . . . . . 211
Тестирование и архитектура . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212
Шлюзы к базам данных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212
10   ﻿Оглавление
Преобразователи данных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
Службы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214
Заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214
Глава 24. Неполные границы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
Пропустить последний шаг . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216
Одномерные границы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
Фасады . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
Заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
Глава 25. Уровни и границы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
Охота на Вампуса . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220
Чистая архитектура? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
Пересечение потоков . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224
Разбиение потоков . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224
Заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
Глава 26. Главный компонент . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
Конечная деталь . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229
Заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232
Глава 27. Службы: большие и малые . . . . . . . . . . . . . . . . . . . . . . . . . . 233
Сервисная архитектура? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234
Преимущества служб? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234
Проблема с животными . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236
Спасение в объектах . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238
Службы на основе компонентов . . . . . . . . . . . . . . . . . . . . . . . . . . . 239
Сквозные задачи . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240
Заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241
Глава 28. Границы тестов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242
Тесты как компоненты системы . . . . . . . . . . . . . . . . . . . . . . . . . . . 243
Проектирование для простоты тестирования . . . . . . . . . . . . . . 244
Программный интерфейс для тестирования . . . . . . . . . . . . . . . 245
Безопасность . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245
Заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246
Оглавление      11
Глава 29. Чистая встраиваемая архитектура . . . . . . . . . . . . . . . . . . . . 247
Тест на профпригодность . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250
Привязка к оборудованию — узкое место . . . . . . . . . . . . . . . . . . 253
Заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264
Часть VI. Детали . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265
Глава 30. База данных — это деталь . . . . . . . . . . . . . . . . . . . . . . . . . . . 266
Реляционные базы данных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267
Почему системы баз данных настолько распространены? . . 268
Сохранятся ли диски? ..................................... 269
Детали . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270
А производительность? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270
История . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270
Заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272
Глава 31. Веб — это деталь . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273
Бесконечный маятник . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274
Вывод . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276
Заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277
Глава 32. Фреймворки — это деталь . . . . . . . . . . . . . . . . . . . . . . . . . . . 278
Авторы фреймворков . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279
Неравный брак . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279
Риски . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280
Решение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280
Объявляю вас . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281
Заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281
Глава 33. Практический пример: продажа видео . . . . . . . . . . . . . . . . . 282
Продукт . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283
Анализ вариантов использования .......................... 283
Компонентная архитектура . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285
Управление зависимостями . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286
Заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287
12   ﻿Оглавление
Глава 34. Недостающая глава . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288
Упаковка по уровням . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289
Упаковка по особенностям . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290
Порты и адаптеры ......................................... 291
Упаковка по компонентам . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293
Дьявол в деталях реализации . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298
Организация и инкапсуляция . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299
Другие режимы разделения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302
Заключение: недостающий совет . . . . . . . . . . . . . . . . . . . . . . . . . . 304
Часть VII. Приложение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305
Архитектурная археология . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306
Профсоюзная система учета . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307
Laser Trim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314
Контроль алюминиевого литья под давлением . . . . . . . . . . . . . 318
4-TEL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319
Компьютер зоны обслуживания . . . . . . . . . . . . . . . . . . . . . . . . . . . 324
Язык C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328
BOSS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330
pCCU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331
DLU/DRU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333
VRS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335
Электронный секретарь . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338
Система командирования ремонтников . . . . . . . . . . . . . . . . . . . 340
ROSE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346
Регистрационные экзамены для архитекторов . . . . . . . . . . . . . 348
Заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351